/*
 * TODO: - Smooth einfügen.
 *       - Animationen einfügen.
 *       - Bilder von Animationen in ZIP ordner Packen.
 */

package Engine.PhysicEngine;

import static org.lwjgl.opengl.GL11.*;
import java.awt.Font;
import java.util.Random;

import javax.jws.Oneway;

import Engine.*;

import org.lwjgl.Sys;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.newdawn.slick.Color;

import org.newdawn.slick.opengl.Texture;

/*
 * Eine Klasse die alle funktionen einer Spielfigur bereitstellt.
 * Kann sowohl für den Spieler als auch für Mobs verwendet werden.
 */
public abstract class PlayerController extends RigidBody {

	protected Texture IDLEimg;// ID = 0

	public Engine engine;
	public int MaxSpeed = 5;
	public int Beschleunigung = 5;
	public int JumpForce = 30;

	public int TerreinHeight = 320;

	public PlayerController(Engine engine) {

		this.engine = engine;

	}

	public void init(Physic physic) {
		super.init(physic, 32, 8);// Initialiert den rigidbody
		Random random = new Random();
		setxPosition(random.nextInt(654260)+100);
	}

	public int GetXPosition() {
		return getxPosition();
	}

	public int GetYPosition() {
		return getyPosition();
	}

	public int zindex = 1;

	public void drawPlayer() {
		
		if (IDLEimg != null) {
			
			updateCamera(
					(float) (getxPosition() - (0.5 * Display.getWidth()) + (0.5 * Width)),
					(float) (getyPosition() - (0.5 * Display.getHeight())));

			glPushMatrix();
			glTranslatef(getxPosition(), getyPosition(), 0);
			DrawImage(IDLEimg, 0, 0, Width, Height, zindex);
			DrawWeapon();
			glPopMatrix();
			// System.out.println("XPOS: "+yPosition+" YPOS: "+ yPosition);

		} else {
			System.out.println("No Img");
		}
	}
	
	public abstract void DrawWeapon();

	public void updateCamera(float x, float y) {

		/*int tmpx = (int) (-(engine.getWidth() / 2) + ((engine.getWidth() / (2 * engine.zoom))));
		if (x < tmpx) {
			x = tmpx;
		}*/
		//int tmpy = (int) (-(engine.getHeight() / 2) + ((engine.getHeight() / (2 * engine.zoom))));
		//if (y < tmpy) {
		//	y = tmpy;
		//}

		//if (y > tmpy + (70)) {
		//	y = tmpy + (70);
		//}

		engine.UpdateCamera(x, y);
		// engine.UpdateCamera(getxPosition()+00, -getyPosition());
	}

	@Override
	public void RenderObject_gui() {
		// TODO Auto-generated method stub

	}

	public void updatePhysic(Time time) {
		
		if (Keyboard.isKeyDown(Keyboard.KEY_D)) {

			if (getxGeschwindigkeit() < MaxSpeed)
				AddForce(0, Beschleunigung);
			else
				setxGeschwindigkeit(MaxSpeed);
		}
		if (Keyboard.isKeyDown(Keyboard.KEY_A)) {
			if (-getxGeschwindigkeit() < MaxSpeed)
				AddForce(1, Beschleunigung);
			else
				setxGeschwindigkeit(-MaxSpeed);
		}
		if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)
				& (getPhysic().CanJump(getCollider()) != 0))
			setyGeschwindigkeit(-JumpForce * getPhysic().CanJump(getCollider()));

		
		if(getxPosition()>654360){
			setxPosition(654360);
			setxGeschwindigkeit(-100);
			}
		if(getxPosition()<1000){
			setxPosition(1000);
			setxGeschwindigkeit(100);
			}
		
		engine.textRenderer.line3 = "Player: X: " + GetXPosition() + " Y: "
				+ GetYPosition() + " XGeschwindigkeit: "
				+ (int) getxGeschwindigkeit() + " XGeschwindigkeit: "
				+ (int) getyGeschwindigkeit();
	}

}
